//rodowisko R dla pocztkujcych

//Rozdzia 9. - Odprawa u generaw
//John M. Quick

//Wicej wykresw, grafw i diagramw w rodowisku R

> #ustaw katalog roboczy rodowiska R
> #zastp przykadow ciek tak, ktra jest odpowiednia dla Ciebie
> setwd("C:/Users/RUser/Strateg/")

> #zaaduj obszar roboczy dla rozdziau 9.
> load("rDlaPocztkujcych_R_09_KopiaDlaCzytelnika.RData")

//Dopasowywanie wykresu supkowego

> #zmodyfikuj wykres supkowy z rozdziau 8., ktry porwnywa rednie czasy trwania bitew dla rnych metod walk
> #uyj argumentu names, aby umieci opis tekstowy przy kadym ze supkw
> #argument names jest wektorem zawierajcym etykiety tekstowe uywane dla kadego supka wykresu
> barAllMethodsDurationNames <- c("Atak ogniowy", "Zasadzka", "Walka bezporednia", "Okrenie")
> #uyj argumentu width, aby dopasowa szeroko kadego supka
> #pamitaj, e argument width moe wykorzystywa pojedyncz warto w celu ustalenia jednakowej szerokoci dla wszystkich supkw, ale moe take zawiera wektor danych, ktry definiuje szerokoci oddzielnie dla kadego supka
> #zwr uwag na to, e aby moliwe byo uycie w argumencie width pojedynczej wartoci, musi zosta zdefiniowany rwnie argument xlim
> barAllMethodsDurationLimX <- c(0, 4)
> barAllMethodsDurationWidth <- 0.25
> #uyj argumentu space, aby zmieni odstp midzy supkami
> #warto argumentu space jest zalena od przecitnej szerokoci supka; domylnie wynosi ona 0,2
> #pamitaj, e argument space moe wykorzystywa pojedyncz warto w celu ustalenia jednakowych odstpw dla wszystkich supkw, ale moe take zawiera wektor danych, ktry definiuje odstpy oddzielnie dla kadego supka
> barAllMethodsDurationSpace <- 2
> #uyj funkcji barplot(...), aby stworzy i wywietli wykres supkowy
> barplot(height = barAllMethodsDurationBars, main = barAllMethodsDurationLabelMain, xlab = barAllMethodsDurationLabelX, ylab = barAllMethodsDurationLabelY, xlim = barAllMethodsDurationLimX, ylim = barAllMethodsDurationLimY, col = barAllMethodsDurationRainbowColors, names = barAllMethodsDurationNames, width = barAllMethodsDurationWidth, space = barAllMethodsDurationSpace)

> #zdefiniuj orientacj wykresu, uywajc w tym celu argumentu horiz
> #jeli argument horiz jest rwny TRUE, supki wykresu zostan narysowane poziomo
> #jeli argument horiz jest rwny FALSE (warto domylna), supki wykresu zostan narysowane pionowo
> barAllMethodsDurationHoriz <- TRUE
> #pamitaj, e wykres musi zosta przeorientowany, aby by prawidowo wywietlany
> #mona do tego doprowadzi poprzez zamian wartoci dla wszystkich argumentw odnoszcych si do osi x i y
> #uyj funkcji barplot(...), aby stworzy i wywietli wykres supkowy
> barplot(height = barAllMethodsDurationBars, main = barAllMethodsDurationLabelMain, xlab = barAllMethodsDurationLabelY, ylab = barAllMethodsDurationLabelX, xlim = barAllMethodsDurationLimY, ylim = barAllMethodsDurationLimX, col = barAllMethodsDurationRainbowColors, names = barAllMethodsDurationNames, width = barAllMethodsDurationWidth, space = barAllMethodsDurationSpace, horiz = barAllMethodsDurationHoriz)

> #stwrz nowy wykres supkowy, aby zaprezentowa opcj kumulowania 
> #tworzenie skumulowanego wykresu supkowego, ktry oddzielnie dla krlestw Shu i Wei wywietli redni liczb onierzy biorcych udzia w kadym z rodzajw walk 
> #aktywuj opcj kumulacji poprzez uycie argumentu beside
> #jeli argument beside jest rwny TRUE (warto domylna), supki bd umiejscowione obok siebie
> #jeli argument beside jest rwny FALSE, supki bd uoone jeden nad drugim
> barAllMethodsSoldiersBeside <- FALSE
> #pamitaj, e wartoci supkw musz zosta podane w postaci macierzy, aby argument beside mg zadziaa
> #oblicz wartoci supkw dla kadej z metod walki

> #atak ogniowy
> meanShuSoldiersFire <- mean(subsetFire$onierzeShu)
> meanWeiSoldiersFire <- mean(subsetFire$onierzeWei)

> #zasadzka
> meanShuSoldiersAmbush <- mean(subsetAmbush$onierzeShu)
> meanWeiSoldiersAmbush <- mean(subsetAmbush$onierzeWei)

> #walka bezporednia
> meanShuSoldiersHeadToHead <- mean(subsetHeadToHead$onierzeShu)
> meanWeiSoldiersHeadToHead <- mean(subsetHeadToHead$onierzeWei)

> #okrenie
> meanShuSoldiersSurround <- mean(subsetSurround$onierzeShu)
> meanWeiSoldiersSurround <- mean(subsetSurround$onierzeWei)

> #umie wartoci supkw w macierzy, uywajc w tym celu funkcji matrix(...)
> #macierz powinna mie cztery kolumny (po jednej dla kadej z metod) oraz dwa wiersze (po jednym dla kadego z krlestw)
> #gdy wykres zostanie utworzony, wiersze bd odpowiada supkom umieszczonym jeden nad drugim
> barAllMethodsSoldiersBars <- matrix(c(meanShuSoldiersFire, meanWeiSoldiersFire, meanShuSoldiersAmbush, meanWeiSoldiersAmbush,meanShuSoldiersHeadToHead, meanWeiSoldiersHeadToHead, meanShuSoldiersSurround, meanWeiSoldiersSurround), 2, 4)
> #dopasuj wykres
> barAllMethodsSoldiersMain <- "Przecitna liczba onierzy biorcych udzia w walkach w podziale na krlestwa"
> barAllMethodsSoldiersLabX <- "Metoda walki"
> barAllMethodsSoldiersLabY <- "Liczba onierzy"
> barAllMethodsSoldiersNames <- c("Atak ogniowy", "Zasadzka", "Walka bezporednia", "Okrenie")
> #uyj funkcji barplot(...), aby stworzy i wywietli wykres supkowy
> barplot(height = barAllMethodsSoldiersBars, main = barAllMethodsSoldiersMain, xlab = barAllMethodsSoldiersLabX, ylab = barAllMethodsSoldiersLabY, names = barAllMethodsSoldiersNames, beside = barAllMethodsSoldiersBeside)

> #uyj argumentu density, aby zdefiniowa grubo linii cieniowania
> #argument density moe wykorzystywa pojedyncz warto nieujemn uywan dla wszystkich wierszy macierzy, ale moe take zawiera wektor danych, ktry definiuje oddzielne wartoci dla kadego z wierszy
> #jednostk miary argumentu density jest liczba linii przypadajcych na cal - domylna warto wynosi NULL
> barAllMethodsSoldiersDensity <- c(10, 25)
> #argument angle modyfikuje kt wywietlania linii cieniowania
> #argument angle moe wykorzystywa pojedyncz warto uywan dla wszystkich wierszy macierzy, ale moe take zawiera wektor danych, ktry definiuje oddzielne wartoci dla kadego z wierszy
> #jednostk miary argumentu angle s stopnie
> barAllMethodsSoldiersAngle <- c(45, -45)
> #uyj funkcji barplot(...), aby stworzy i wywietli wykres supkowy
> barplot(height = barAllMethodsSoldiersBars, main = barAllMethodsSoldiersMain, xlab = barAllMethodsSoldiersLabX, ylab = barAllMethodsSoldiersLabY, names = barAllMethodsSoldiersNames, beside = barAllMethodsSoldiersBeside, density = barAllMethodsSoldiersDensity, angle = barAllMethodsSoldiersAngle)

> #dodaj opisy do skumulowanego wykresu supkowego
> #uyj argumentw x i y, aby zdefiniowa dokadne pooenie objanie
> #pamitaj, e dopuszczalne wartoci argumentw x i y s zalene od ogranicze osi wsprzdnych
> #dodaj opisy dla armii Shu i Wei
> #uyj argumentw density i angle, ktre ju zastosowae w funkcji barplot(...)
> #uyj argumentu cex, by zwikszy wielko obszaru opisu
> legend(x = 0.2, y = 70000, legend = c("Shu", "Wei"), density = barAllMethodsSoldiersDensity, angle = barAllMethodsSoldiersAngle, cex = 2)

> #stwrz wykres, ktry prezentuje cakowit liczb onierzy armii Shu i Wei na dwch oddzielnych supkach
> #dane dotyczce onierzy
> heroBarSoldiersShu <- sum(subset(soldiersByCity$onierze, soldiersByCity$Krlestwo == "Shu"))
> heroBarSoldiersWei <- sum(subset(soldiersByCity$onierze, soldiersByCity$Krlestwo == "Wei"))
> heroBarSoldiersData <- c(heroBarSoldiersShu, heroBarSoldiersWei)
> #modyfikacje
> heroBarSoldiersMain = "Cakowita liczba onierzy w podziale na krlestwa"
> heroBarSoldiersLabX = "Krlestwo"
> heroBarSoldiersLabY = "Liczba onierzy"
> heroBarSoldiersLimY = c(0, 400000)
> heroBarSoldiersNames = c("Shu", "Wei")
> #barplot(...) function
> barplot(height = heroBarSoldiersData, main = heroBarSoldiersMain, xlab = heroBarSoldiersLabX, ylab = heroBarSoldiersLabY, ylim = heroBarSoldiersLimY, names = heroBarSoldiersNames)

> #stwrz skumulowany wykres supkowy, ktry prezentuje cakowit liczb onierzy armii Shu i Wei na dwch oddzielnych supkach, ktre przedstawiaj dodatkowy podzia na miasta
> #dane dotyczce onierzy
> heroBarStackedSoldiersShu <- subset(soldiersByCity$onierze, soldiersByCity$Krlestwo == "Shu")
> heroBarStackedSoldiersWei <- subset(soldiersByCity$onierze, soldiersByCity$Krlestwo == "Wei")
> heroBarStackedSoldiersData <- matrix(c(heroBarStackedSoldiersShu, heroBarStackedSoldiersWei), 11, 2)
> #modyfikacje
> heroBarStackedSoldiersMain = "Cakowita liczba onierzy w podziale na krlestwa i miasta"
> heroBarStackedSoldiersLabX = "Krlestwo"
> heroBarStackedSoldiersLabY = "Liczba onierzy"
> heroBarStackedSoldiersLimX = c(0, 4)
> heroBarStackedSoldiersLimY = c(0, 400000)
> heroBarStackedSoldiersNames = c("Shu", "Wei")
> heroBarStackedSoldiersRainbowColors = rainbow(11)
> heroBarStackedSoldiersWidth <- 0.75
> #okrel parametr beside
> heroBarStackedSoldiersBeside = FALSE
> #funkcja barplot(...)
> barplot(height = heroBarStackedSoldiersData, main = heroBarStackedSoldiersMain, xlab = heroBarStackedSoldiersLabX, ylab = heroBarStackedSoldiersLabY, xlim = heroBarStackedSoldiersLimX, ylim = heroBarStackedSoldiersLimY, names = heroBarStackedSoldiersNames, col = heroBarStackedSoldiersRainbowColors, width = heroBarStackedSoldiersWidth, beside = heroBarStackedSoldiersBeside)
> #opis
> legend(x = 1.9, y = 395000, legend = subset(soldiersByCity$City, soldiersByCity$Kingdom == "Shu"), fill = heroBarStackedSoldiersRainbowColors, title = "Shu")
> legend(x = 3, y = 395000, legend = subset(soldiersByCity$City, soldiersByCity$Kingdom == "Wei"), fill = heroBarStackedSoldiersRainbowColors, title = "Wei")

//Dopasowywanie wykresu punktowego

> #zmodyfikuj pojedynczy wykres punktowy z rozdziau 8., ktry prezentowa zaleno midzy liczbami onierzy Shu i Wei biorcych udzia w historycznych atakach ogniowych
> #uyj argumentu pch, aby zmodyfikowa styl symboli oznaczajcych punkty danych
> #argument pch akceptuje liczby cakowite z zakresu od 0 do 25
> scatterplotFireSoldiersPch <- 2
> #uyj argumentu cex, aby zmieni rozmiar symboli oznaczajcych punkty danych
> #do argumentu cex mona przypisa warto numeryczn oznaczajc, o jak warto bd przeskalowane symbole
> #domyln wartoci argumentu cex jest 1
> scatterplotFireSoldiersCex <- 3
> plot(x = scatterplotFireWeiSoldiersData, y = scatterplotFireShuSoldiersData, main = scatterplotFireSoldiersLabelMain, xlab = scatterplotFireSoldiersLabelX, ylab = scatterplotFireSoldiersLabelY, pch = scatterplotFireSoldiersPch, cex = scatterplotFireSoldiersCex)

> #przygotuj wykres punktowy w celu wywietlenia informacji o innych metodach walki
> #zmodyfikuj nazw wykresu
> scatterplotAllMethodsSoldiersMain <- "Liczba onierzy przypadajcych na metod walki"
> #przeskaluj osie w taki sposb, by mona byo wywietli nowe dane
> scatterplotAllMethodsSoldiersLimX <- c(0, 200000)
> scatterplotAllMethodsSoldiersLimY <- c(0, 150000)
> #uyj argumentu col, aby uzyska moliwo odrniania metod walki
> scatterplotAllMethodsSoldiersFireCol <- "red"
> #uyj funkcji plot(...), aby stworzy i wywietli poprawiony wykres punktowy
> plot(x = scatterplotFireWeiSoldiersData, y = scatterplotFireShuSoldiersData, main = scatterplotAllMethodsSoldiersMain, xlab = scatterplotFireSoldiersLabelX, ylab = scatterplotFireSoldiersLabelY, xlim = scatterplotAllMethodsSoldiersLimX, ylim = scatterplotAllMethodsSoldiersLimY, col = scatterplotAllMethodsSoldiersFireCol, pch = scatterplotFireSoldiersPch, cex = scatterplotFireSoldiersCex)

> #uyj funkcji points(...), aby doda nowe relacje do wykresu punktowego
> #dodaj punkty reprezentujce pozostae trzy metody walki
> #pamitaj, e po wprowadzeniu w rodowisku R kolejnej nowej funkcji na wykresie pojawi si natychmiast zwizane z ni nowe elementy

> #zasadzka
> pointsAmbushDataX <- subsetAmbush$onierzeWei
> pointsAmbushDataY <- subsetAmbush$onierzeShu
> pointsAmbushType <- "p"
> pointsAmbushPch <- 1
> pointsAmbushCex <- 1
> pointsAmbushCol <- "blue"
> points(x = pointsAmbushDataX, y = pointsAmbushDataY, type = pointsAmbushType, col = pointsAmbushCol, pch = pointsAmbushPch, cex = pointsAmbushCex)

> #walka bezporednia
> pointsHeadToHeadDataX <- subsetHeadToHead$onierzeWei
> pointsHeadToHeadDataY <- subsetHeadToHead$onierzeShu
> pointsHeadToHeadType <- "p"
> pointsHeadToHeadPch <- 3
> pointsHeadToHeadCex <- 1
> pointsHeadToHeadCol <- "darkorange2"
> points(x = pointsHeadToHeadDataX, y = pointsHeadToHeadDataY, type = pointsHeadToHeadType, col = pointsHeadToHeadCol, pch = pointsHeadToHeadPch, cex = pointsHeadToHeadCex)

> #okrenie
> pointsSurroundDataX <- subsetSurround$onierzeWei
> pointsSurroundDataY <- subsetSurround$onierzeShu
> pointsSurroundType <- "p"
> pointsSurroundPch <- 4
> pointsSurroundCex <- 1
> pointsSurroundCol <- "forestgreen"
> points(x = pointsSurroundDataX, y = pointsSurroundDataY, type = pointsSurroundType, col = pointsSurroundCol, pch = pointsSurroundPch, cex = pointsSurroundCex)

> #dodaj objanienia
> #uyj argumentw x i y, aby ustali dokadne pooenie objanie
> #dodaj opisy dla metod walki
> #wybierz odpowiednie kolory wypenie pasujce do kolorw punktw
> legend(x = 55000, y = 155000, legend = c("Atak ogniowy", "Zasadzka", "Walka bezporednia", "Okrenie"), fill = c("red", "blue", "darkorange2", "forestgreen"))

> #dodaj najlepiej dopasowan prost, uywajc funkcji abline(...)
> #argument reg reprezentuje rwnanie regresji
> #zosta on zdefiniowany za pomoc funkcji lm(...)
> #argument lty definiuje styl uywanej linii
> #podobnie jak w przypadku innych funkcji graficznych, argument col definiuje kolor linii
> #pamitaj, e po wprowadzeniu w rodowisku R kolejnej nowej funkcji na wykresie pojawi si natychmiast zwizane z ni nowe elementy

> #atak ogniowy
> scatterplotAllMethodsSoldiersFireLineReg <- 
lm(scatterplotFireShuSoldiersData ~ 
scatterplotFireWeiSoldiersData)
> scatterplotAllMethodsSoldiersFireLty <- "solid"
> #funkcja abline(...) spowoduje dodanie do istniejcego wykresu najlepiej dopasowanej prostej
> abline(reg = scatterplotAllMethodsSoldiersFireLineReg, lty = scatterplotAllMethodsSoldiersFireLty, col = scatterplotAllMethodsSoldiersFireCol)

> #zasadzka
> scatterplotAllMethodsSoldiersAmbushLineReg <- 
lm(pointsAmbushDataY ~ pointsAmbushDataX)
> scatterplotAllMethodsSoldiersAmbushLty <- "dotted"
> #funkcja abline(...) spowoduje dodanie do istniejcego wykresu najlepiej dopasowanej prostej
> abline(reg = scatterplotAllMethodsSoldiersAmbushLineReg, lty = scatterplotAllMethodsSoldiersAmbushLty, col = pointsAmbushCol)

> #walka bezporednia
> scatterplotAllMethodsSoldiersHeadToHeadLineReg <- 
lm(pointsHeadToHeadDataY ~ pointsHeadToHeadDataX)
> scatterplotAllMethodsSoldiersHeadToHeadLty <- "dotdash"
> #funkcja abline(...) spowoduje dodanie do istniejcego wykresu asymptoty
> abline(reg = scatterplotAllMethodsSoldiersHeadToHeadLineReg, lty = scatterplotAllMethodsSoldiersHeadToHeadLty, col = pointsHeadToHeadCol)

> #okrenie
> scatterplotAllMethodsSoldiersSurroundLineReg <- lm(pointsSurroundDataY ~ pointsSurroundDataX)
> scatterplotAllMethodsSoldiersSurroundLty <- "dashed"
> #funkcja abline(...) spowoduje dodanie do istniejcego wykresu najlepiej dopasowanej prostej
> abline(reg = scatterplotAllMethodsSoldiersSurroundLineReg, lty = scatterplotAllMethodsSoldiersSurroundLty, col = pointsSurroundCol)

> #stwrz wykres punktowy, ktry prezentuje zwizek midzy poprawnym przeprowadzeniem atakw ogniowych w przeszoci i ich ocen
> heroScatterplotFireExecutionData <- numericExecutionFire
> heroScatterplotFireRatingData <- subsetFire$Rating
> #customizations
> heroScatterplotFireMain <- "Zwizek midzy ocen a poprawnym wykonaniem atakw ogniowych"
> heroScatterplotFireLabX <- "Wykonanie"
> heroScatterplotFireLabY <- "Ocena"
> #funkcja plot(...)
> plot(x = heroScatterplotFireExecutionData, y = heroScatterplotFireRatingData, main = heroScatterplotFireMain, xlab = heroScatterplotFireLabX, ylab = heroScatterplotFireLabY)
> #czy uzupenienie wykresu o prost regresji ma w tym przypadku sens?

> #uyj funkcji sunflowerplot(...) z takimi samymi argumentami, jakich uye w funkcji plot(...)
> sunflowerplot(x = heroScatterplotFireExecutionData, y = heroScatterplotFireRatingData, main = heroScatterplotFireMain, xlab = heroScatterplotFireLabX, ylab = heroScatterplotFireLabY)
> #czym rni si dwie powysze funkcje w sposobie prezentowania danych?

//Dopasowywanie wykresu liniowego

> #zmodyfikuj wykres liniowy z rozdziau 8., ktry prezentowa czasy trwania historycznych atakw ogniowych
> #uyj argumentu lwd, aby ustali grubo linii
> #parametr lwd akceptuje wartoci nieujemne; domyln wartoci jest 1
> lineFireDurationWidth <- 3
> #uyj funkcji plot(...), aby stworzy i wywietli wykres liniowy
> #jak pamitasz, wykres liniowy uywa takiej samej funkcji plot(...), jaka bya wykorzystywana podczas tworzenia wykresu punktowego, lecz z innym argumentem type
> plot(x = lineFireDurationDataX, y = lineFireDurationDataY, main = lineFireDurationMain, xlab = lineFireDurationLabX, ylab = lineFireDurationLabY, type = lineFireDurationType, lwd = lineFireDurationWidth)

> #przygotuj wykres liniowy do wywietlenia danych dotyczcych innych metod walki
> #zmodyfikuj nazw wykresu
> lineFireDurationMain = "Czas trwania bitwy w podziale na metody walki"
> #odpowiednio przeskaluj o y, by mona byo wywietla nowe dane
> lineFireDurationLimY <- c(0, 200)
> #uyj argumentu col, aby uzyska moliwo odrniania metod walki
> lineFireDurationCol <- "red"
> #uyj funkcji plot(...), aby stworzy i wywietli wykres liniowy
> plot(x = lineFireDurationDataX, y = lineFireDurationDataY, main = lineFireDurationMain, xlab = lineFireDurationLabX, ylab = lineFireDurationLabY, ylim = lineFireDurationLimY, type = lineFireDurationType, lwd = lineFireDurationWidth, col = lineFireDurationCol)

 #uyj funkcji lines(...), aby doda nowe relacje do wykresu liniowego
> #dodaj do wykresu linie reprezentujce pozostae trzy metody walki
> #pamitaj, e po wprowadzeniu w rodowisku R kolejnej nowej funkcji na wykresie pojawi si natychmiast zwizane z ni nowe elementy

> #zasadzka
> lineAmbushDataY <- subsetAmbush$CzasTrwaniaDni
> lineAmbushWidth <- 1
> lineAmbushCol <- "blue"
> lines(x = lineFireDurationDataX, y = lineAmbushDataY, type = lineFireDurationType, lwd = lineAmbushWidth, col = lineAmbushCol)

> #walka bezporednia
> lineHeadToHeadDataY <- subsetHeadToHead$CzasTrwaniaDni
> lineHeadToHeadWidth <- 1
> lineHeadToHeadCol <- "darkorange2"
> lines(x = lineFireDurationDataX, y = lineHeadToHeadDataY, type = lineFireDurationType, lwd = lineHeadToHeadWidth, col = lineHeadToHeadCol)

> #okrenie
> lineSurroundDataY <- subsetSurround$CzasTrwaniaDni
> lineSurroundWidth <- 1
> lineSurroundCol <- "forestgreen"
> lines(x = lineFireDurationDataX, y = lineSurroundDataY, type = lineFireDurationType, lwd = lineSurroundWidth, col = lineSurroundCol)

> #dodaj opisy do wykresu liniowego
> #uyj argumentw x i y, aby ustali dokadne pooenie objanie
> #dodaj opisy dla metod walki
> #dopasuj kolory obszaru objanie do kolorw linii
> legend(x = 20.5, y = 210, legend = c("Atak ogniowy", "Zasadzka", "Walka bezporednia", "Okrenie"), fill = c("red", "blue", "darkorange2", "forestgreen"))

> #stwrz wykres, ktry zaprezentuje cakowit liczb onierzy armii Shu biorcych udzia w bitwach dla wszystkich metod walk
> #definicja wykresu
> heroLineShuSoldiersDataX <- c(1:30)
> heroLineShuSoldiersMain <- "onierze Shu w podziale na metody walki"
> heroLineShuSoldiersLabX <- "Numer bitwy"
> heroLineShuSoldiersLabY <- "Liczba onierzy"
> heroLineShuSoldiersLimY <- c(0, 200000)
> heroLineShuSoldiersType <- "l"
> heroLineShuSoldiersWidth <- 2
> #metody
> heroLineShuSoldiersFireDataY <- subsetFire$onierzeShu
> heroLineShuSoldiersFireCol <- "red"
> heroLineShuSoldiersAmbushDataY <- subsetAmbush$onierzeShu
> heroLineShuSoldiersAmbushCol <- "blue"
> heroLineShuSoldiersHeadToHeadDataY <- subsetHeadToHead$onierzeShu
> heroLineShuSoldiersHeadToHeadCol <- "darkorange2"
> heroLineShuSoldiersSurroundDataY <- subsetSurround$onierzeShu
> heroLineShuSoldiersSurroundCol <- "forestgreen"
> #pocztkowy wykres liniowy
> plot(x = heroLineShuSoldiersDataX, y = heroLineShuSoldiersFireDataY, main = heroLineShuSoldiersMain, xlab = heroLineShuSoldiersLabX, ylab = heroLineShuSoldiersLabY, ylim = heroLineShuSoldiersLimY, type = heroLineShuSoldiersType, lwd = heroLineShuSoldiersWidth, col = heroLineShuSoldiersFireCol)
> #linie zwizane z metodami walki
> #zasadzka
> lines(x = heroLineShuSoldiersDataX, y = heroLineShuSoldiersAmbushDataY, type = heroLineShuSoldiersType, lwd = heroLineShuSoldiersWidth, col = heroLineShuSoldiersAmbushCol)
> #walka bezporednia
> lines(x = heroLineShuSoldiersDataX, y = heroLineShuSoldiersHeadToHeadDataY, type = heroLineShuSoldiersType, lwd = heroLineShuSoldiersWidth, col = heroLineShuSoldiersHeadToHeadCol)
> #okrenie
> lines(x = heroLineShuSoldiersDataX, y = heroLineShuSoldiersSurroundDataY, type = heroLineShuSoldiersType, lwd = heroLineShuSoldiersWidth, col = heroLineShuSoldiersSurroundCol)
> #opis
> legend(x = 20, y = 200000, legend = c("Atak ogniowy", "Zasadzka", "Walka bezporednia", "Okrenie"), fill = c("red", "blue", "darkorange2", "forestgreen"))

//Dopasowywanie wykresu skrzynkowego

> #zmodyfikuj wieloelementowy wykres skrzynkowy z rozdziau 9., ktry porwnuje liczby onierzy Shu dla rnych metod walki
> #przeskaluj osie x i y, by jak najlepiej zaprezentowa nowy zakres danych
> boxPlotAllMethodsShuSoldiersLimY <- c(0, 100000)
> #uyj argumentu range, by zmieni dugo wsw dla kadej ze skrzynek
> #uyj argumentu range rwnego 0, by dopasowa dugo wsw do punktw o najbardziej skrajnych wartociach
> #uyj argumentu range wikszego od 0, aby ustali dla dugoci wsw warto n razy wiksz od rozstpu wiartkowego
> #w naszym przykadzie ustalimy zakres dugoci wsw o wielkoci rozstpu wiartkowego
> boxPlotAllMethodsShuSoldiersRange <- 1
> #uyj funkcji boxplot(...), aby stworzy i wywietli zmodyfikowany wykres skrzynkowy
> boxplot(formula = boxplotAllMethodsShuSoldiersData, main = boxPlotAllMethodsShuSoldiersLabelMain, xlab = boxPlotAllMethodsShuSoldiersLabelX, ylab = boxPlotAllMethodsShuSoldiersLabelY, ylim = boxPlotAllMethodsShuSoldiersLimY, range = boxPlotAllMethodsShuSoldiersRange)

> #ukryj domylne osie wykresu
> #ponownie narysuj wykres skrzynkowy, uywajc argumentw xaxt i yaxt pozwalajcych na ukrycie osi
> boxplotAllMethodsShuSoldiersAxtX = "n"
> boxplotAllMethodsShuSoldiersAxtY = "n"
> #uyj funkcji boxplot(...), aby stworzy i wywietli wykres skrzynkowy
> #Twj wykres skrzynkowy nie bdzie mia adnych etykiet ani znacznikw na osiach x i y
> boxplot(formula = boxplotAllMethodsShuSoldiersData, main = boxPlotAllMethodsShuSoldiersLabelMain, xlab = boxPlotAllMethodsShuSoldiersLabelX, ylab = boxPlotAllMethodsShuSoldiersLabelY, ylim = boxPlotAllMethodsShuSoldiersLimY, range = boxPlotAllMethodsShuSoldiersRange, xaxt = boxplotAllMethodsShuSoldiersAxtX, 
yaxt = boxplotAllMethodsShuSoldiersAxtY)

> #uyj funkcji axis(...), aby doda wasne osie x i y do wykresu skrzynkowego
> #Twoje osie bd narysowane na wykresie, ktry zosta ju wywietlony w oknie graficznym
> #zostan one narysowane po wywoaniu funkcji axis(...) w konsoli rodowiska R
> #stwrz wasn o x
> axis(side = 1, at = c(1, 2, 3, 4), labels = c("Zasadzka", "Atak ogniowy", "Walka bezporednia", "Okrenie"), las = 0)
> #stwrz wasn o y
> axis(side = 2, at = c(1000, 25000, 50000, 75000, 100000), las = 0)

> #stwrz wykres skrzynkowy, ktry prezentuje zwizek midzy liczbami onierzy Wei biorcych udzia w kadym z rodzajw walk
> #definicja wykresu skrzynkowego
> heroBoxplotAllMethodsWeiSoldiersData <- battleHistory$onierzeWei ~ battleHistory$Metoda
> heroBoxplotAllMethodsWeiSoldiersMain <- "onierze Wei w podziale na metody walki"
> heroBoxplotAllMethodsWeiSoldiersLabX <- "Metoda walki"
> heroBoxplotAllMethodsWeiSoldiersLabY <- "Liczba onierzy"
> heroBoxplotAllMethodsWeiSoldiersLimY <- c(0, 75000)
> heroBoxplotAllMethodsWeiSoldiersRange <- 1
> heroBoxplotAllMethodsWeiSoldiersXaxt <- "n"
> heroBoxplotAllMethodsWeiSoldiersYaxt <- "n"
> #pocztkowy wykres skrzynkowy
> boxplot(formula = heroBoxplotAllMethodsWeiSoldiersData, main = heroBoxplotAllMethodsWeiSoldiersMain, xlab = heroBoxplotAllMethodsWeiSoldiersLabX, ylab = heroBoxplotAllMethodsWeiSoldiersLabY, ylim = heroBoxplotAllMethodsWeiSoldiersLimY, range = heroBoxplotAllMethodsWeiSoldiersRange, xaxt = heroBoxplotAllMethodsWeiSoldiersXaxt, yaxt = heroBoxplotAllMethodsWeiSoldiersYaxt)
> #wasne osie
> #x
> axis(side = 1, at = c(1, 2, 3, 4), labels = c("Zasadzka", "Atak ogniowy", "Walka bezporednia", "Okrenie"), las = 0)
> #y
> axis(side = 2, at = c(1000, 10000, 25000, 50000, 75000), las = 0)

//Dopasowywanie histogramu

> #zmodyfikuj histogram z rozdziau 8. wywietlajcy dystrybucj czstoci czasw trwania minionych atakw ogniowych
> #uyj argumentu breaks, aby pogrupowa kolumny histogramu na osi x
> #argument breaks akceptuje wektor zawierajcy punkty, przy ktrych powinny si pojawi kolumny
> histFireDurationBreaks <- c(0:14)
> #uyj funkcji hist(...), aby stworzy i wywietli histogram
> histFireDurationLabY <- "Czsto"
> hist(x = histFireDurationData, main = histFireDurationDataMain, xlab = histFireDurationLabX, ylab = histFireDurationLabY, col = histFireDurationRainbowColor, breaks = histFireDurationBreaks)

> #uyj argumentu freq, aby zaprezentowa gsto lub liczebno
> #jeli argument freq jest rwny TRUE (warto domylna), na osi y zostan wywietlone liczebnoci
> #liczebno okrela, ile razy w zbiorze pojawi si okrelony punkt danych
> #jeli argument freq jest rwny FALSE, na osi y zostan wywietlone gstoci
> #gsto informuje, jaki procent stanowi liczebno okrelonego punktu w stosunku do caego zbioru danych
> #suma gstoci powinna zawsze wynosi 1
> histFireDurationFreq <- FALSE
> #pamitaj, aby zmodyfikowa argument ylim, poniewa nasz poprzedni wykres wykorzystywa liczebnoci, a nie gstoci
> histFireDurationDensityLimY <- c(0, 0.2)
> #uyj funkcji hist(...), aby stworzy i wywietli histogram
> histFireDurationLabY <- "Gsto"
> hist(x = histFireDurationData, main = histFireDurationDataMain, xlab = histFireDurationLabX, ylab = histFireDurationLabY, ylim = histFireDurationDensityLimY, col = histFireDurationRainbowColor, breaks = histFireDurationBreaks, freq = histFireDurationFreq)

> #stwrz histogram, ktry przedstawia liczby onierzy Shu biorcych udzia w historycznych atakach ogniowych
> #liczebno
> heroHistShuSoldiersData <- subsetFire$onierzeShu
> heroHistShuSoldiersMain <- "onierze Shu biorcy udzia w atakach ogniowych"
> heroHistShuSoldiersLabX <- "onierze Shu"
> heroHistShuSoldiersRainbowColor <- rainbow(8)
> heroHistShuSoldiersBreaks <- c(0, 250, 500, 750, 1000, 2000, 5000, 10000)
> heroHistShuSoldiersFreqCount <- TRUE
> hist(x = heroHistShuSoldiersData, main = heroHistShuSoldiersMain, xlab = heroHistShuSoldiersLabX, col = heroHistShuSoldiersRainbowColor, breaks = heroHistShuSoldiersBreaks, freq = heroHistShuSoldiersFreqCount)
> #gsto
> heroHistShuSoldiersLimY <- c(0, 0.001)
> heroHistShuSoldiersFreqDensity <- FALSE
> hist(x = heroHistShuSoldiersData, main = heroHistShuSoldiersMain, xlab = heroHistShuSoldiersLabX, ylim = heroHistShuSoldiersLimY, col = heroHistShuSoldiersRainbowColor, breaks = heroHistShuSoldiersBreaks, freq = heroHistShuSoldiersFreqDensity)

//Dopasowywanie wykresu koowego

> #zmodyfikuj wykres koowy z rozdziau 8., ktry prezentowa koszt ataku ogniowego przy uwzgldnieniu cakowitych zasobw przydzielonych armii Shu
> #uyj argumentu labels, aby do wykresu koowego doda opisy zawartoci procentowych 
> #stwrz wektor zawierajcy etykiety uywane do oznaczania skadnikw wykresu koowego
> pieFireGoldCostLabelsPercent <- round(pieFireGoldCostSlices / sum(pieFireGoldCostSlices) * 100, 1)
> #uyj funkcji paste(...), aby doda znak procentu (%) do kadego z opisw
> pieFireGoldCostLabelsPercent <- paste(pieFireGoldCostLabelsPercent, "%", sep="")
> #pamitaj, e funkcja paste(...) moe zosta uyta z kadym rodzajem tekstw, uzupeniajc ten tekst o przedrostek lub przyrostek
> #uyj funkcji pie(...), aby stworzy i wywietli wykres koowy
> pie(x = pieFireGoldCostSlices, labels = pieFireGoldCostLabelsPercent, main = pieFireGoldCostMain, col = pieFireGoldCostSpecificColors)

> #dodaj opis do wykresu koowego
> legend(x = "bottom", legend = pieFireGoldCostLabels, fill = pieFireGoldCostSpecificColors)

> #stwrz wykres koowy, ktry prezentuje zwizek midzy liczb onierzy biorcych udzia w planowanym ataku ogniowym oraz cakowit liczb wojownikw stacjonujcych w miecie Hanzhong. Jeli tytu wykresu nie mieci si w oknie, po prostu je powiksz
> #definicja wykresu
> heroFirePieHanzhongSlices <- c(2500, 197500)
> heroFirePieHanzhongLabels <- c(round(heroFirePieHanzhongSlices / sum(heroFirePieHanzhongSlices) * 100, 1))
> heroFirePieHanzhongMain <- "Liczba onierzy walczcych w porwnaniu z liczb onierzy stacjonujcych w Hanzhong"
> heroFirePieHanzhongLabelsPercent <- paste(heroFirePieHanzhongLabels, "%", sep="")
> heroFirePieHanzhongSpecificColors <- c("red", "yellow")
> #funkcja pie(...)
> pie(x = heroFirePieHanzhongSlices, labels = heroFirePieHanzhongLabelsPercent, main = heroFirePieHanzhongMain, col = heroFirePieHanzhongSpecificColors)
> #opis
> legend(x = "bottom", legend = c("Biorcy udzia w ataku ogniowym", "Stacjonujcy w Hanzhong"), fill = heroFirePieHanzhongSpecificColors)

//Tworzenie grafiki

> #utwrz wasn grafik od samego pocztku
> #krok 1: zbuduj struktur bazow
> #stwrz grafik, ktra wywietla liczby onierzy Shu i Wei biorcych udzia w minionych atakach ogniowych
> #przygotuj podstawowe parametry grafiki
> #pamitaj, e wymaga to zastanowienia si nad danymi, ktre chcesz wywietli
> buildFireSoldiersMain <- "onierze w podziale na krlestwa"
> buildFireSoldiersLabX <- "Numer bitwy"
> buildFireSoldiersLabY <- ""
> buildFireSoldiersLimX <- c(0, 30)
> buildFireSoldiersLimY <- c(0, 50000)
> #ukryj punkty i osie
> buildFireSoldiersType <- "n"
> buildFireSoldiersAxtX <- "n"
> buildFireSoldiersAxtY <- "n"
> #uyj funkcji plot(...), aby stworzy struktur bazow dla swojej grafiki
> plot(x = 0, y = 0, main = buildFireSoldiersMain, xlab = buildFireSoldiersLabX, ylab = buildFireSoldiersLabY, xlim = buildFireSoldiersLimX, ylim =buildFireSoldiersLimY, type = buildFireSoldiersType, xaxt = buildFireSoldiersAxtX, yaxt = buildFireSoldiersAxtY)

> #krok 2: dodaj osie
> #uyj funkcji axis(...), aby doda wasne osie x i y do grafiki
> #o x
> axis(side = 1, at = c(0:30), las = 0)
> #o y
> axis(side = 2, at = c(1000, 5000, 10000, 20000, 30000, 40000, 50000), las = 1)

> #krok 3: umie dane
> #uyj funkcji points(...), aby doda dane do grafiki
> #pamitaj, e w tym celu moesz take uy funkcji lines(...)
> #dodaj odpowiednie punkty, by zaprezentowa liczb onierzy Shu biorcych udzia w minionych atakach ogniowych
> pointsFireShuSoldiersDataX <- c(1:30)
> pointsFireShuSoldiersDataY <- subsetAmbush$onierzeShu
> pointsFireShuSoldiersType <- "p"
> pointsFireShuSoldiersColor <- "forestgreen"
> points(x = pointsFireShuSoldiersDataX, y = pointsFireShuSoldiersDataY, type = pointsFireShuSoldiersType, col = pointsFireShuSoldiersColor)
> #dodaj odpowiednie punkty, by zaprezentowa liczb onierzy Wei biorcych udzia w minionych atakach ogniowych
> pointsFireWeiSoldiersDataX <- c(1:30)
> pointsFireWeiSoldiersDataY <- subsetAmbush$onierzeWei
> pointsFireWeiSoldiersType <- "p"
> pointsFireWeiSoldiersColor <- "blue"
> pointsFireWeiSoldiersPch <- 0
> points(x = pointsFireWeiSoldiersDataX, y = pointsFireWeiSoldiersDataY, type = pointsFireWeiSoldiersType, col = pointsFireWeiSoldiersColor, pch = pointsFireWeiSoldiersPch)

> #krok 4: w razie potrzeby dodaj objanienia
> #uyj funkcji legend(...), aby doda objanienia do grafiki
> legend(x = 0, y = 50000, legend = c("Shu", "Wei"), 
fill = c(pointsFireShuSoldiersColor, pointsFireWeiSoldiersColor))

//Tworzenie grafiki z wieloma elementami wizualnymi

> #uyj funkcji par(mfcol), aby przygotowa okno graficzne do jednoczesnego wywietlania wielu elementw wizualnych
> #argument mfcol zawiera wektor definiujcy liczb wierszy i kolumn, w ktrych powinno si umieci oddzielne elementy wizualne w oknie graficznym
> #w naszym przypadku chcemy stworzy 4 elementy graficzne, wic uyjmy wektora 2x2
> par(mfcol = c(2,2))
> #zwr uwag na to, e po wywoaniu tej funkcji pojawi si puste okno graficzne
> #jeli zostanie ono zamknite, ustawienia rodowiska zostan przywrcone, tak by w oknie graficznym mg by wywietlany pojedynczy wykres
> #jeli pozostanie otwarte, bdzie mona na nim umieszcza kolejne obiekty graficzne w zdefiniowanej siatce 2x2

> #stwrz pierwsz grafik poprzez wykonanie standardowych czynnoci sucych do wygenerowania wykresu
> #ten wykres punktowy wywietla liczby onierzy Shu i Wei biorcych udzia w minionych atakach ogniowych
> plot(x = 0, y = 0, main = buildFireSoldiersMain, xlab = buildFireSoldiersLabX, ylab = buildFireSoldiersLabY, xlim = buildFireSoldiersLimX, ylim = buildFireSoldiersLimY, type = buildFireSoldiersType, xaxt = buildFireSoldiersAxtX, yaxt = buildFireSoldiersAxtY)
> axis(side = 1, at = c(0:30), las = 0)
> axis(side = 2, at = c(1000, 5000, 10000, 20000, 30000, 40000, 50000), las = 1)
> points(x = pointsFireShuSoldiersDataX, y = pointsFireShuSoldiersDataY, type = pointsFireShuSoldiersType, col = pointsFireShuSoldiersColor)
> points(x = pointsFireWeiSoldiersDataX, y = pointsFireWeiSoldiersDataY, type = pointsFireWeiSoldiersType, col = pointsFireWeiSoldiersColor, pch = pointsFireWeiSoldiersPch)
> legend(x = 0, y = 50000, legend = c("Shu", "Wei"), fill = c(pointsFireShuSoldiersColor, pointsFireWeiSoldiersColor))

> #dodaj drugi wykres wywietlajcy czasy trwania historycznych bitew
> #w razie potrzeby stwrz nowe zmienne
> #ewentualnie moesz ponownie uy zmiennych wykorzystywanych przy tworzeniu wstpnej grafiki
> #podstawowe parametry
> buildFireDurationMain <- "Czas trwania [dni]"
> buildFireDurationLabY <- "Dni"
> buildFireDurationLimY <- c(0, 14)
> #uyj funkcji plot(...), aby stworzy struktur bazow dla grafiki
> plot(x = 0, y = 0, main = buildFireDurationMain, xlab = buildFireSoldiersLabX, ylab = buildFireDurationLabY, xlim = buildFireSoldiersLimX, ylim =buildFireDurationLimY, type = buildFireSoldiersType, xaxt = buildFireSoldiersAxtX, yaxt = buildFireSoldiersAxtY)

> #osie
> #o x
> axis(side = 1, at = c(0:30), las = 0)
> #o y
> axis(side = 2, at = c(0:14), las = 1)

> #uyj funkcji lines(...), aby doda dane do grafiki
> #dodaj lini reprezentujc czas trwania (w dniach) kadej z bitew
> lineFireDurationDataX <- c(1:30)
> lineFireDurationDataY <- subsetFire$CzasTrwaniaDni
> lineFireDurationType <- "o"
> lineFireDurationWidth <- 1
> lineFireDurationColor <- "red"
> lines(x = lineFireDurationDataX, y = lineFireDurationDataY, type = lineFireDurationType, lwd = lineFireDurationWidth, col = lineFireDurationColor)

> #uyj funkcji abline(...), aby doda poziom lini do wykresu
> #dodaj lini reprezentujc redni czas trwania bitew
> lineFireDurationMeanWidth <- 3
> lineFireDurationMeanColor <- "blue"
> abline(h = mean(lineFireDurationDataY), lwd = lineFireDurationMeanWidth, col = lineFireDurationMeanColor)

> #dodaj trzeci wykres, ktry wywietla procentowy udzia zwyciskich atakw ogniowych podczas udanej realizacji strategii
> #podstawowe parametry
> buildFireResultMain <- "Wyniki bitew przy udanej realizacji strategii"
> buildFireResultSlices <- c(length(subset(numericResultFire, 
numericExecutionFire == 1 & numericResultFire == 1)), 
length(subset(numericExecutionFire, 
numericExecutionFire == 1 & numericResultFire == 0)))
> buildFireResultLabels <- paste(buildFireResultSlices / 
sum(buildFireResultSlices) * 100, "%", sep = "")
> buildFireResultColors <- c("red", "blue")
> #uyj funkcji pie(...), aby stworzy i wywietli wykres koowy
> pie(x = buildFireResultSlices, labels = buildFireResultLabels, main = buildFireResultMain, col = buildFireResultColors)

> #objanienia
> legend(x = "topright", legend = c("Wygrana", "Poraka"), 
fill = buildFireResultColors, cex = 0.85)

> #dodaj czwarty wykres, ktry porwnuje koszt (w tysicach jednostek zota) atakw ogniowych z innymi rodzajami walk
> #oblicz koszty rnych metod, uywajc porwnywalnych zasobw
> goldCostFire <- functionGoldCost(2500, 225, 7)
> goldCostAmbush <- functionGoldCost(meanShuSoldiersAmbush, 225, meanDurationAmbush)
> goldCostHeadToHead <- functionGoldCost(meanShuSoldiersHeadToHead, 225, meanDurationHeadToHead)
> goldCostSurround <- functionGoldCost(meanShuSoldiersSurround, 225, meanDurationSurround)

> #podstawowe parametry
> #pamitaj, e wysoko supka zostaa podzielona przez 1000, dziki czemu bdzie on reprezentowa tysice jednostek zota
> #takie prezentowanie duych liczb jest sposobem na zwikszenie zrozumiaoci i czytelnoci wykresw 
> buildCostHeight <- c(goldCostFire, goldCostAmbush, goldCostHeadToHead, goldCostSurround) / 1000
> buildCostMain <- "Porwnanie kosztw ze wzgldu na metody"
> buildCostLabX <- "Koszt [tysice jednostek zota]"
> buildCostLimX <- c(0, 400)
> buildCostLimY <- c(0, 5)
> buildCostNames <- c("AtOg", "Zas", "WalBez", "Okr")
> buildCostColors <- rainbow(length(buildCostHeight))
> buildCostHoriz <- TRUE

> #uyj funkcji barplot(...), aby stworzy i wywietli wykres supkowy
> barplot(height = buildCostHeight, main = buildCostMain, xlab = buildCostLabX, xlim = buildCostLimX, ylim = buildCostLimY, names = buildCostNames, col = buildCostColors, horiz = buildCostHoriz)

> #objanienia
> legend(x = 275, y = 2, legend = round(buildCostHeight * 1000, 0), 
fill = buildCostColors, title = "Koszty", cex = 0.75)

//Zapamitaj obszar roboczy i tre konsoli

> #zapisz zawarto swojego obszaru roboczego R w nowym pliku
> #pamitaj o dodaniu rozszerzenia .RData
> save.image("rDlaPocztkujcych_R_09_mjObszarRoboczy.RData")

> #zapisz zawarto swojej konsoli R poprzez skopiowanie i wklejenie treci do pliku teksowego